/**
 * Created by xiongzhanzhou on 2022/01/10.
 */
 (function () {
    //============================
    // 正式上线需要修改以下URL
    //============================

    // 获取微信JSSDK配置信息接口 tenant租户代码 base64
    var wxJsapiCfgUrl = 'https://wxshare.sctvcloud.com:38080/wx/jsapi/{{tenant}}/getJsapiCfg';

    // 重要提示，避免踩坑
    // 在配置JS接口安全域名时不要包含http 例：www.sctv.com
    // 什么是域名？https://developer.mozilla.org/zh-CN/docs/Learn/Common_questions/What_is_a_domain_name

    // 在需要调用JS接口的页面引入如下JS文件，（支持https）http://res.wx.qq.com/open/js/jweixin-1.6.0.js
    var jweixin_res1 = 'https://res.wx.qq.com/open/js/jweixin-1.6.0.js';
    // 如需进一步提升服务稳定性，当上述资源不可访问时，可改访问：http://res2.wx.qq.com/open/js/jweixin-1.6.0.js （支持https）
    var jweixin_res2 = 'https://res2.wx.qq.com/open/js/jweixin-1.6.0.js';
    // 微信分享方法
    var wxShareFn = [
        'updateAppMessageShareData',
        'updateTimelineShareData',
        'onMenuShareTimeline',
        'onMenuShareAppMessage',
        'onMenuShareQQ',
        'onMenuShareWeibo',
        'onMenuShareQZone',
    ];

    /**
     * 载入微信jssdk js
     * @param {Function} callback 成功回调
     * @param {Boolean} res2 载入res2
     */
    function loadWxJSSDK(callback, res2) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.onerror = function () {
            !res2 && loadWxJSSDK(callback, true);
        };
        script.onload = function () {
            callback && callback();
        };
        script.src = res2 ? jweixin_res2 : jweixin_res1;
        var heads = document.getElementsByTagName('head');
        if (heads.length) {
            heads[0].appendChild(script);
        }
    }

    /**
     * 获取微信JSSDK配置信息
     * @param {String} tenant 租户代码
     * @param {Function} callback 成功回调方法
     */
    function loadWxJsApiConfig(tenant, callback) {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status < 300) {
                var res = JSON.parse(xhr.responseText);
                res.errcode === 0 && callback && callback(res);
            }
        };
        // url
        var url = wxJsapiCfgUrl.replace(
            '{{tenant}}',
            encodeURIComponent(tenant)
        );
        url += '?url=';
        url += encodeURIComponent(window.location.href);
        // send
        xhr.open('GET', url, true);
        xhr.send(null);
    }

    /**
     * 配置wx.config
     * @param {Object} cfg
     */
    function wxConfig(cfg) {
        wx.config({
            debug: false,
            appId: cfg.appId,
            timestamp: cfg.timestamp,
            nonceStr: cfg.nonceStr,
            signature: cfg.signature,
            jsApiList: wxShareFn.concat(['checkJsApi']),
        });
    }

    /**
     * 配置wx.ready
     * @param {Object} data 数据
     */
    function wxReady(data) {
        wx.ready(function () {
            wx.checkJsApi({
                jsApiList: wxShareFn,
                success: function (res) {
                    if (res.checkResult) {
                        for (var key in res.checkResult) {
                            wx[key]({
                                title: data.title,
                                desc: data.desc,
                                link: data.link,
                                imgUrl: data.imgUrl,
                            });
                        }
                    }
                },
            });
        });
    }

    /**
     * 配置wx.error
     */
    function wxError() {
        wx.error(function (res) {
            console.log(res);
        });
    }

    /**
     * 页面加载完成
     */
    window.addEventListener('DOMContentLoaded', function () {
        var paramsJson = document.getElementById('params-data').innerText || '';
        paramsJson = paramsJson.trim();
        if (!paramsJson) {
            console.log('params-data empty.');
            return;
        }
        params = JSON.parse(paramsJson);
        if (!params.tenant || !params.id) {
            console.log('params.id params.tenant empty.');
            return;
        }

        loadWxJsApiConfig(params.tenant, function (cfg) {
            var data = {
                title: window.document.title, // 分享标题
                link: window.location.href, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
                imgUrl: cfg.shareImgUrl, // 分享图标
                desc: cfg.shareDescription // 分享描述
            };
            loadWxJSSDK(function () {
                wxReady(data);
                wxError();
                wxConfig(cfg);
            });
        });
    });
})();
